/*
以几个例子演示执行executeUpdate() DML（插入，删除，修改） executeQuery() DQL操作（查询）
 */
package MyJDBC;

import java.sql.*;
import java.util.Arrays;

public class SqlExecute {
    public static void main(String[] args) {
        try(Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.32.130:3306/study", "root","123456");
            Statement statement = connection.createStatement();) {
            int i = statement.executeUpdate("insert into student values(1940618804, '小芳', '女')"); //返回的是生效的行数，类型int，所以赋值给int
            System.out.println("生效了" + i + "行");

            System.out.println(statement.executeUpdate("delete from student where sid = 1940618801"));  //删除，返回的是行数

            System.out.println(statement.executeUpdate("update student set name = '小方' where sid = 1940618804"));  //修改，返回的是行数

            ResultSet set = statement.executeQuery("select * from student");  //查询，返回的是ResultSet对象，还需从ResultSet对象里按列读取结果
            while (set.next()){  //ResultSet结果集对象里有个指针，开始时指向第一行的前面，第一次使用next(),指针到第一行。每调用一次next()，指针往下移动一行，跟迭代器有些类似
                System.out.print(set.getInt(1) + " ");  //使用set.getString() set.getInt()等获取对应类型的数据
                System.out.print(set.getString("name") + " "); //可以写第几列，也可以写列名
                System.out.println(set.getString(3));  //可以用getString或getInt，用Int就要确定列对应的值是int类型的，否则报错。如果不确定，都用String即可，返回的都按String处理
            }

            //批处理，当我们要执行很多条语句时，可以不用一次一次提交，而是一口气全部提交给数据库处理，这样节省IO操作，节省时间，提高效率
            //使用的是addBatch(),executeBatch()方法
            statement.addBatch("insert into student value (1940618805, '菜狗', '男')");  //先添加到批量里
            statement.addBatch("insert into student value (1940618806, '又菜又爱玩', '男')");
            statement.addBatch("insert into student value (1940618807, '好好学习', '男')");
            int[] x = statement.executeBatch();  //执行批量里语句
            System.out.println(Arrays.toString(x));  //打印返回的结果，返回的是int数组


        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}
